﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using NUnit.Mocks;
using Sistema_Totem.Logica.Comandos.ComandoPlantilla;
using Sistema_Totem.Clases;
using Sistema_Totem.Clases.Fabricas;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Presentacion.Contrato.Plantillas;
using Sistema_Totem.Presentacion.Vista.Plantillas;
using Sistema_Totem.Presentacion.Presentador.Plantillas;
using System.Web.UI.WebControls;
using System.Web.UI;
using AjaxControlToolkit;
using Sistema_Totem.Acceso_a_Datos.IDAOS;
using Sistema_Totem.Acceso_a_Datos.FabricaDAOS;

namespace Sistema_Totem.Pruebas
{
    [TestFixture]
    public class PruebaPlantilla
    {
        private Entidad _plantilla;
        private Comando<Entidad> comando;
        private Comando<List<Entidad>> comandoX;
        private Comando<List<String>> comandoS;

        #region PruebaComandoAgregarPlantillaPasoUno
        /// <summary>
        /// Prueba para verificar el funcionamiento del comando ComandoAgregarPlantillaPasoUno
        /// </summary>
        [Test]
        public void PruebaComandoAgregarPlantillaPasoUno()
        {
            _plantilla = FabricaEntidad.ObtenerPlantilla();
            String Nombre = "plantilla1";
            String Descripcion = "prueba";
            String Tipo = "Tipo Prueba";
            String Estado = "DESACTIVADO";
            comando = FabricaComando.CrearComandoAgregarPlantillaPasoUno(Nombre, Descripcion, Tipo, Estado);
            _plantilla = comando.Ejecutar();
            Assert.AreEqual((_plantilla as Plantilla).Nombre, Nombre);
            Assert.AreEqual((_plantilla as Plantilla).Descripcion, Descripcion);
            Assert.AreEqual((_plantilla as Plantilla).Tipo, Tipo);
            Assert.AreEqual((_plantilla as Plantilla).Estado, Estado);
        }
        #endregion PruebaComandoAgregarPlantillaPasoUno

        #region PruebaComandoAgregarPlantillaPasoDos
        /// <summary>
        /// Prueba para verificar el funcionamiento del comando ComandoAgregarPlantillaPasoDos
        /// </summary>
        [Test]
        public void PruebaComandoAgregarPlantillaPasoDos()
        {
            _plantilla = FabricaEntidad.ObtenerPlantilla();
            Entidad _plantilla1 = FabricaEntidad.ObtenerPlantilla();
            Panel panel = new Panel();
            Panel panel1 = new Panel();
            String prueba = "prueba";

            //---------------------------
            TextBox text1 = new TextBox();
            text1.Text = prueba;
            panel.Controls.Add(text1);

            DropDownList CantElem = new DropDownList();
            for (int j = 0; j < 20; j++)
            {
                CantElem.Items.Add((j + 1).ToString());
            }
            CantElem.Width = 180;
            panel1.Controls.Add(CantElem);
            //-------------------------

            comando = FabricaComando.CrearComandoAgregarPlantillaPasoDos(panel, panel1, _plantilla);
            _plantilla1 = comando.Ejecutar();

            Assert.IsTrue((_plantilla1 as Plantilla).ListaSeccion.Count == 1);
            Assert.IsTrue((_plantilla1 as Plantilla).ListaSeccion[0].Nombre.ToString() == prueba);
            Assert.IsTrue((_plantilla1 as Plantilla).ListaSeccion[0].ListaControl.Count > 0);

        }
        #endregion PruebaComandoAgregarPlantillaPasoDos

        #region PruebaComandoAgregarPlantillaPasoTres
        /// <summary>
        /// Prueba para verificar el funcionamiento del comando ComandoAgregarPlantillaPasoTres
        /// </summary>
        [Test]
        public void PruebaComandoAgregarPlantillaPasoTres()
        {
            _plantilla = FabricaEntidad.ObtenerPlantilla();
            Entidad _plantilla2 = FabricaEntidad.ObtenerPlantilla();
            Accordion acordion = new Accordion();
            AccordionPane panel = new AccordionPane();
            String prueba = "prueba";

            //---------------------------
            TextBox text1 = new TextBox();
            text1.Text = prueba;
            panel.Controls.Add(text1);

            DropDownList CantElem = new DropDownList();
            for (int j = 0; j < 20; j++)
            {
                CantElem.Items.Add((j + 1).ToString());
            }
            panel.Controls.Add(CantElem);

            CheckBox check = new CheckBox();
            check.Text = prueba;
            panel.Controls.Add(check);

            acordion.Panes.Add(panel);
            //-------------------------

            comando = FabricaComando.CrearComandoAgregarPlantillaPasoTres(acordion, _plantilla);
            _plantilla2 = comando.Ejecutar();

            Assert.IsTrue((_plantilla2 as Plantilla).ListaSeccion.Count == 1);
            Assert.IsTrue((_plantilla2 as Plantilla).ListaSeccion[0].ListaControl[0].Nombre.ToString() == prueba);
            Assert.IsTrue((_plantilla2 as Plantilla).ListaSeccion[0].ListaControl.Count > 0);
            Assert.IsTrue((_plantilla2 as Plantilla).ListaSeccion[0].ListaControl[2].ListaComportamiento[0].Nombre.ToString() == prueba);
            Assert.IsTrue((_plantilla2 as Plantilla).ListaSeccion[0].ListaControl[1].ListaComportamiento.Count > 0);
        }
        #endregion PruebaComandoAgregarPlantillaPasoTres

        #region PruebaComandoConsultar
        /// <summary>
        /// Prueba para verificar el funcionamiento del comando ComandoConsultar
        /// </summary>
        [Test]
        public void PruebaComandoConsultar()
        {
            iDAOPlantilla idao = FabricaDAOSQLServer.getInstacia().CrearDAOPlantilla();
            List<Entidad> dato = new List<Entidad>();
            comandoX = FabricaComando.CrearConsultar();
            dato = comandoX.Ejecutar();
            _plantilla = FabricaEntidad.ObtenerPlantilla();

            Assert.IsNotNull(dato);
            Assert.IsTrue(dato.ElementAt(0).GetType() == _plantilla.GetType());
        }
        #endregion PruebaComandoConsultar

        #region PruebaComandoAgregarPlantilla
        /// <summary>
        /// Prueba para verificar el funcionamiento del comando ComandoAgregarPlantilla
        /// </summary>
        [Test]
        public void PruebaComandoAgregarPlantilla()
        {
            _plantilla = FabricaEntidad.ObtenerPlantilla();
            comando = FabricaComando.CrearComandoAgregarPlantilla(_plantilla);
            Entidad _plantillaAux = FabricaEntidad.ObtenerPlantilla();
            _plantillaAux = comando.Ejecutar();
            Assert.IsNotNull(_plantillaAux);
            Assert.IsTrue(_plantillaAux.GetType() == _plantilla.GetType());
        }
        #endregion PruebaComandoAgregarPlantilla

        #region PruebaComandoPintarXml
        /// <summary>
        /// Prueba para verificar el funcionamiento del comando ComandoPintarXml
        /// </summary>
        [Test]
        public void PruebaComandoPintarXml()
        {
           // _plantilla = FabricaEntidad.ObtenerPlantilla();
            comandoS = FabricaComando.CrearPintar(1);
            List<String> xml = new List<String>();
            xml = comandoS.Ejecutar();
            String seccionSegura = "Seccion:CASO DE USO";
            Assert.IsNotNull(xml);
            Assert.IsTrue(xml.Count > 0 );
            Assert.IsTrue(xml.Contains(seccionSegura));
        }
        #endregion PruebaComandoPintarXml
        
    }
}